iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
Kubernetes

Kubernetes GPU 工作負載工程:排程、資源隔離、推論服務與可觀測性系列 第 12 篇

Day 12|把 vLLM 部署到 Kubernetes:從單 Pod 到可管理服務

  • 分享至 

  • xImage
  •  

前一篇處理「先把推論服務容器化:AI Serving 的 Image 應該怎麼做」,這篇進一步討論「把 vLLM 部署到 Kubernetes:從單 Pod 到可管理服務」。共同的量測條件是前後比較的基礎。

今天要回答的問題

建立 Deployment/Service,處理 GPU request、模型載入與基本健康檢查。

工程邊界

把 vLLM 放上 Kubernetes 後,問題從 process 變成 service lifecycle

Deployment/StatefulSet 的選擇、模型資料來源、startup time、readiness、Service、autoscaling 與 rollout 都會影響 serving。對大型模型而言,Pod 啟動不等於 Ready;只有權重載入完成、GPU 初始化成功,才應開始接流量。

部署時最好把模型版本、image digest、runtime config 與 GPU request 一起版本化,避免「同名 Pod」其實跑著不同模型與參數。

一個可以直接重現的起點

Deployment 先求可重現

模型版本、image tag、GPU request、啟動參數與 model path 都要版本化。不要把「手動進 Pod 改好」算成功。應保存一份可重新套用的 manifest,並記錄從 Pod 建立到 readiness 通過的時間。

最小化 vLLM Deployment 設定

這份 YAML 將「以單 replica vLLM Deployment、Service 與 GPU request 啟動」的變因與觀察欄位留在版本控制中,再由實際 workload 引用。

apiVersion: v1
kind: ConfigMap
metadata:
  name: day12-experiment
  namespace: ai-lab
data:
  change: "以單 replica vLLM Deployment、Service 與 GPU request 啟動"
  fixed: "image, model, input"
  metrics: "rollout, ready time, request success, GPU allocation"
  repeats: "3"

驗證與落地方式

驗證可從「以單 replica vLLM Deployment、Service 與 GPU request 啟動」開始。除了保存 manifest 的期望狀態,也要同步觀察 scheduler event、Pod 狀態轉換、node/GPU 資源與實際請求結果。Kubernetes 顯示 Running 只代表容器已啟動,不代表模型已載入、服務已 Ready,更不代表使用者請求符合 SLO。

這篇優先比較:rollout、ready time、request success、GPU allocation。測試時應準備一組不套用目標策略的對照組,再以相同 workload 套用新策略。若 placement 改善但等待時間、重啟次數或服務錯誤增加,代表問題只是從排程層移到執行層,不能直接判定方案有效。

常見誤判

  • 只看 kubectl get pods 的最終狀態,忽略 Pending reason、event 順序與 readiness 變化。
  • 把 GPU allocation 當成 GPU 效率;資源已分配仍可能因 queue、I/O 或模型載入而閒置。
  • 只測單一 Pod,沒有涵蓋更新、驅逐、節點失效與重新排程,無法得知真正的服務中斷時間。

上線前檢查

部署前應確認 request/limit、affinity、taint、priority、probe 與 disruption policy 是否互相一致。變更後除了檢查 rollout,也要送出代表性請求,核對服務延遲、錯誤率與 GPU 指標。回滾條件需先定義,避免故障發生後才臨時決定是否撤回。若策略依賴特定 GPU 型號或叢集功能,也要明列適用條件,避免在不同 node pool 套用後得到相反結果。

如何閱讀結果

排程結果要和服務結果放在同一條時間線:先看 Pod 為何被放到某個節點,再看模型何時 Ready,最後核對請求是否成功。只改善 placement 卻讓 cold start 或資料下載變慢,仍然可能造成更長的使用者等待時間。

策略通過單次測試後,還要在 rollout、drain 與節點重新加入時重跑。這些事件會重新觸發排程與模型載入,最容易暴露 topology、storage、probe 與 disruption policy 之間的衝突。

結果判讀

判讀不只看最大或最漂亮的數字。這一天真正要回答的是:建立後續擴縮與發布實驗的固定 serving baseline。

如果核心指標改善,但錯誤率、尾端延遲、資源成本或恢復能力變差,這代表取捨,而不是無條件進步。相反地,沒有改善也不是無效結果;至少能排除一條看似合理、實際上不值得增加複雜度的路。

今天的結論

今天的工程判斷是:建立後續擴縮與發布實驗的固定 serving baseline。無論結果支持或否定原本假設,都必須保留完整條件,才能和下一天的實驗串在一起。

下一篇將處理:模型放哪裡:PVC、Local Disk、Object Storage 與 Cache。


參考資料


上一篇
Day 11|先把推論服務容器化:AI Serving 的 Image 應該怎麼做
系列文
Kubernetes GPU 工作負載工程:排程、資源隔離、推論服務與可觀測性 共 12 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言